package cn.itcast.nems.journal.dto;

import cn.itcast.nems.common.QueryParam;
import cn.itcast.nems.employee.dto.EmployeeDTO;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import lombok.Data;

import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;

@Data
public class JournalRenewalDTO implements QueryParam, Serializable {
    private String id ;
    //    /**
    //     * 业务日期;为可能的补录单子准备，如果不存在补录的情况，该字段旧等于创建时间
    //     */
    //private LocalDateTime bizDate ;
    /**
     * 升级到到目标班级
     */
    private Integer targetClazzId ;
    /**
     * 升级到的目标班级名称
     */
    private String targetClazzName ;
    /**
     * 目标班级原始价格
     */
    private BigDecimal targetClazzPrice;
    /**
     * 目标班级所属学科ID
     */
    private String targetClazzSubjectId ;
    /**
     * 目标班级所属学科名称
     */
    private String targetClazzSubjectName ;
    /**
     * 目标班级所在校区ID
     */
    private String targetClazzCampusId ;
    /**
     * 目标班级所在校区名称
     */
    private String targetClazzCampusName ;
    /**
     * 目标班级授课模式ID
     */
    private String targetClazzModelId ;
    /**
     * 目标班级授课模式名称
     */
    private String targetClazzModelName ;
    /**
     * 升班总学籍数
     */
    private Integer renewalQuantity ;
    /**
     * 已缴费学籍数;基于订单支付事件消息处理：订单来源为“升级”时，通过订单ID查询升级凭单订单关系表确定对应升级凭单并标记状态。
     */
    private Integer paidQuantity;
    private String createdStartTime ;
    private String createdEndTime ;
    /**
     * 状态;枚举值：草稿｜DRAFT、审批中｜PENDING、审批通过处理中｜APPROVED、审批未通过且流程结束｜REJECTED、审批通过并处理完成｜FINISHED
     */
    private String state ;
    /**
     * 备注
     */
    private String remark;

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @JsonSerialize(using = LocalDateTimeSerializer.class)
    private LocalDateTime createdDatetime ;
    private String createdBy ;
    /**
     * 凭单头优惠项
     */
    List<JournalRenewalDiscountDTO> discountList ;

    /**
     * 行数据
     */
    List<JournalRenewalLineDTO> lineList ;

    /**
     * 升班目标就业班应付金额
     */
    private BigDecimal targetClazzAmountDue;
    /**
     * 升班目标就业班优惠金额合计
     */
    private BigDecimal targetClazzDiscountAmount;

    /**
     * 审批单ID
     */
    private String formId ;

    /**
     * 特殊申请；枚举值：非特殊｜0、特殊｜1
     */
    private Boolean specialFlag;

    /**
     * 错误信息
     */
    private JournalErrorDTO errorInfo ;

    /**
     * 操作人邮箱
     */
    @JsonIgnore
    private EmployeeDTO employee ;
}
